package android.team.app.network;

import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;

import android.content.Context;
import android.team.app.ui.BaseActivity;

public class AsyncHttpResponseProcess implements AsyncHttpResponseListener {

	private BaseActivity activity;// Để gọi được các phương thức mà viết tại lớp này
	private boolean isShowDialog = true;

	// Xây dựng phương thức khởi tạo
	public AsyncHttpResponseProcess(BaseActivity activity) {

		this.activity = activity;
	}

	public AsyncHttpResponseProcess(BaseActivity activity, boolean isShow) {

		this.activity = activity;
		this.isShowDialog = isShow;
	}

	@Override
	public void before() {
		// Trước khi load dữ liệu sẽ xử lý tại đây
		// Nếu để laod data hiển thị dialog
		// Nếu để đồng bộ thì không hiển thị

		if (isShowDialog) {
			// sẽ show
			activity.showProgressDialog("waiting");
		}
	}

	@Override
	public void after(int statusCode, HttpResponse response) {
		// Đây là phương thức được gọi khi quá trình load data kết thúc

		if (isShowDialog) {
			// Tại đây sẽ đóng dialog
			activity.hideProgressDialog();
		}

		// Tại đây sẽ xử lý kết quả trả về dựa vào statuscode(thành công thì sử
		// lý dữ liệu, không thành cong thì phải
		// thông báo cho người dùng lỗi gì)
		switch (statusCode) {
		case AsyncHttpBase.STATUS_NETWORK_OFF:

			// Show dialog thông báo network không có
			break;

		case AsyncHttpBase.STATUS_NETWORK_ERROR:

			// Show dialog thông báo lỗi mạng
			break;
		case AsyncHttpBase.STATUS_NETWORK_EXCEIPTION:

			// Show dialog thông báo exceiption
			break;
		case AsyncHttpBase.STATUS_NETWORK_TIMEOUT:

			// Show dialog thông báo sử lý quá thời gian quy định
			break;
		case AsyncHttpBase.STATUS_NETWORK_OK:

			// Đây là trạng thái thành công, response thành công
			//Xử lý response như thế nào tại đây
			
			processHttpResponse(response);
			
			break;

		default:
			break;
		}
	}

	public void processHttpResponse(HttpResponse response) {
		// Tại đây dựa vào response sẽ lấy dữ liệu kiểu string
		String jsonString = "";
		try {
			jsonString = EntityUtils.toString(response.getEntity());
			
			if(jsonString == null){
				//Thông báo lỗi không có dữ liệu trả về
				
				return;
			}else{
				//Bắt đầu quá trình xử lý
				int success = 0;//Thất bại// 1 thành công
				JSONObject jsonObject = new JSONObject(jsonString);
				success = jsonObject.getInt("success");
				if(success == 1){
					//Thành công
					processIfResponseSuccess(jsonObject);
				}else {
					//Thất bại
					processIfResponceFail();
				}				
			}
			
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}
	
	//Xây dựng phương thức để xử lý dữ liệu thành công
	public void processIfResponseSuccess(JSONObject object){
		
	}
	
	//Xây dựng phương thức để xử lý dữ liệu khi thất bại
	public void processIfResponceFail(){
		
	}
	
}
